#!/bin/bash

# 定义容器名和路径
CONTAINER_NAME="pg15-postgis3.3"                      # Docker 容器名
CONTAINER_DATA_DIR="/var/lib/postgresql/data"  # 容器内的数据目录
DATE=$(date +%Y-%m-%d)
#HOST_DATA_DIR="/data/postgresql/data"          # 宿主机挂载的数据目录

# 获取 WAL 文件名两个都可以用
#wal_num=`docker exec -u postgres pg_controldata | grep checkpoint | grep WAL | awk '{print $6}'`
wal_num=$(docker exec -u postgres $CONTAINER_NAME \
  pg_controldata $CONTAINER_DATA_DIR | \
  grep "Latest checkpoint's REDO WAL file" | \
  awk '{print $6}')

if [ -z "$wal_num" ]; then
  echo "${DATE}错误：无法获取 WAL 文件号。"
  exit 1
fi

# 检查磁盘使用率（以宿主机挂载点 /data 为例）
usage=$(df -P / | awk 'NR==2 {print $5}' | tr -d '%')

# 清理逻辑
if [ "$usage" -gt 30 ]; then
  echo "${DATE}磁盘使用率超过 30%（当前：$usage%），正在清理 WAL 文件..."
  
  # 方法一：在容器内执行清理
  docker exec -u postgres $CONTAINER_NAME \
    pg_archivecleanup $CONTAINER_DATA_DIR/pg_wal $wal_num

  # 方法二：在宿主机直接清理（需安装 pg_archivecleanup）
  # pg_archivecleanup $HOST_DATA_DIR/pg_wal $wal_num
else
  echo "${DATE}磁盘使用率正常（当前：$usage%）。"
fi